package cn.dkk.create_design.singleton.lazy.onceSafe;

/**
 * 单重线程安全的饿汉式单例模式
 */
public class OnceSafeLazySingleton {

    private static OnceSafeLazySingleton onceSafeLazySingleton;

    private OnceSafeLazySingleton(){}

    /**
     * 在这里存在多线程的问题
     * 线程A进入判断后时间片到期,线程B进入后创建对象返回
     * 线程A再次分配时间片,此时AB线程得到的就不是同一个onceSafeLazySingleton对象
     *
     * 通过synchronized单重加锁可以解决该u问题
     */
    public synchronized static OnceSafeLazySingleton getInstance(){
        if (onceSafeLazySingleton==null){
            onceSafeLazySingleton=new OnceSafeLazySingleton();
        }
        return onceSafeLazySingleton;
    }

}
